/*
** Generate_C_std.h
** 
** Made by Michael DuPont
** Login   <mdupont@mdupontdesktop2>
** 
** Started on  Thu Mar  5 19:21:32 2009 Michael DuPont
** Last update Thu Mar  5 19:21:32 2009 Michael DuPont
*/

#ifndef   	GENERATE_C_STD_H_
# define   	GENERATE_C_STD_H_

/*
 * phc -- the open source PHP compiler
 * See doc/license/README.license for licensing information
 *
 * Generate C code
 *
 * We define a virtual class "Pattern" which corresponds to a particular kind
 * of statement that we can generate code for. We inherit from Pattern to 
 * define the various statements we can translate, create instances of each
 * of these classes, and then for every statement in the input, cycle through
 * all the patterns to find one that matches, and then call "generate" on that
 * pattern.
 */

// TODO Variable_variables cannot be used to access superglobals. See warning
// in http://php.net/manual/en/language.variables.superglobals.php
// TODO: that is not true - add a test case.

// TODO:
//		magic methods are:
//			__construct
//			__destruct
//			__get
//			__set
//			__unset
//			__isset
//			__call
//			__toString
//			__serialize
//			__unserialize
//
//	So that means casts are pure.

#include <fstream>
#include <boost/format.hpp>

#include "lib/List.h"
#include "lib/Set.h"
#include "lib/Map.h"
#include "lib/escape.h"
#include "lib/demangle.h"
#include "process_ir/General.h"
#include "process_ir/XML_unparser.h"
#include "codegen/Generate_C_annotations.h"
#include "process_mir/MIR_to_AST.h"
#include "pass_manager/Pass_manager.h"

#include "Generate_C.h"
#include "parsing/MICG_parser.h"
#include "embed/embed.h"
#include "Generate_C_patterns.h"


using namespace boost;
using namespace MIR;
using namespace std;

#define CREATE(CLASSNAME) Pattern * create ## CLASSNAME (){return new CLASSNAME(); };

//#include "Generate_C_std.h"
#endif 	    /* !GENERATE_C_STD_H_ */
